package d1_byte_stream;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class FileOutputStreamDemo04 {
    public static void main(String[] args) throws Exception {
        //目标: 文件字节输出流的使用
        //1、创建一个文件字节输出流管道与目标接通
        //管道一出来的时候,就会将以前写的文本进行删除  //覆盖管道
//        FileOutputStream os = new FileOutputStream("javapromax\\day09-charset-io\\src\\陈某03.txt");//覆盖管道
        //写数据的时候是不许要进行准备文件
        //true 进行追加
        OutputStream os = new FileOutputStream("" +
                "javapromax\\day09-charset-io\\src\\陈某04.txt", true);//追加管道

        //2、开始写字节数据出去
        //public void write(int a): 每次只写出去一个字节
        os.write('a');
        os.write(97);
//        os.write('许'); //[000] 乱码  //只写一个字节,出现中文,三个字节是就会乱码

        //进行换行
        os.write("\r\n".getBytes());//换行   //\r\n -->兼容性更加强大

        //public void write(byte[] buffer): 每次写一个字节数组出去
        byte[] bytes = "一剑光寒十四州,东风不与周郎便".getBytes();//就是进行编码操作
        os.write(bytes);
        os.write("\r\n".getBytes());//换行   //\r\n -->兼容性更加强大

        //public void write(byte[] buffer, int pos, int len): 写一个字节数组的一部分出去
        //         字节数组   开始索引   写出多少个字节
        os.write(bytes, 0, 21);

        os.write("\r\n".getBytes());//换行   //\r\n -->兼容性更加强大


        //io流属于系统资源, 会占用内存和相应的IO资源
        //用完之后必须关闭管道, 已释占用的资源
       // os.flush();//刷新缓存中的数据到磁盘里面去
        os.close();// 关闭包含了刷新

        //必须刷新的另外一个原因:
        //IO资源就是占一些总线 , 占计算机底层的一些硬件设备
        //内存快 磁盘慢 -->如果直接写入磁盘会拖累内存的速度
        //很多程序在写数据的时候, 会在内存中提供一个缓冲区 , 往内存缓冲区里面暂存
        //写满了才进行, 一起刷新到文件里面去, 这样子就只需要一次系统调用 ,
        //程序很快就跑完了, 剩下的自己去刷
        //如果不刷新,数据还在缓存区, 数据就没有真正写到文件里面
    }
}
